package quantum;

/**
 * Autor: Chadan
 */
public class Vector2 {
    
    float Xi;
    float Yi;
    float X;
    float Y;
    int escalaY;
    int escalaX;
    
    
    Vector2(){
        Xi = 0;
        Yi = 0;
        X = 0;
        Y = 0;
    }
    
    Vector2(float x, float y){
        Xi = 0;
        Yi = 0;
        this.X = x;
        this.Y = y;
    }
    
    Vector2(Punto ini, Punto fin){
        this.Xi = ini.X;
        this.Yi = ini.Y;
        this.X = fin.X - ini.X;
        this.Y = fin.Y - ini.Y;
    }

    double magnitud(){
        return Math.sqrt((double)((X)*(X) + (Y)*(Y)));
    }

    static Vector2 minimo(Vector2 a, Vector2 b, Punto p){
        double distA = Math.sqrt((double)((a.X + a.Xi - p.X)*(a.X + a.Xi - p.X) + (a.Y + a.Yi - p.Y)*(a.Y + a.Yi - p.Y)));
        double distB = Math.sqrt((double)((b.X + b.Xi - p.X)*(b.X + b.Xi - p.X) + (b.Y + b.Yi - p.Y)*(b.Y + b.Yi - p.Y)));
        return distA < distB ? a : b;
    }

    static Vector2 calculaFlecha(Vector2 dato, double distancia, double pendiente){
        Punto puntoA = new Punto();
        Punto puntoB = new Punto();
        double a = dato.X+dato.Xi;
        double b = dato.Y+dato.Yi;
        puntoA.X = (float)((a*(1 + pendiente*pendiente) + Math.sqrt(distancia*distancia*(1 + pendiente*pendiente)))/(1 + pendiente*pendiente));
        puntoA.Y = (float)((b*(1 + pendiente*pendiente) + pendiente*Math.sqrt(distancia*distancia*(1+pendiente*pendiente)))/(1 + pendiente*pendiente));
        puntoB.X = (float)((a*(1 + pendiente*pendiente) - Math.sqrt(distancia*distancia*(1 + pendiente*pendiente)))/(1 + pendiente*pendiente));
        puntoB.Y = (float)((b*(1 + pendiente*pendiente) - pendiente*Math.sqrt(distancia*distancia*(1+pendiente*pendiente)))/(1 + pendiente*pendiente));
        return minimo(new Vector2(new Punto((float)a, (float)b), puntoA), new Vector2(new Punto((float)a, (float)b), puntoB), Main.plan.puntoP);
    }


}
